package mc.web;

import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import mc.bus.BazaLekarzy;
import mc.domain.Lekarz;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.beans.propertyeditors.StringTrimmerEditor;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;
import org.apache.commons.lang.StringUtils;

/**
 * Kontroler wyswietlajacy pusty formularz dodajacy Lekarza,
 * w razie podania parametru ?id=[id_lekarza] formularz edycji,
 * w wypadku podania blednego (id niebedacego w bazie, ciagow znakow alfanumerycznych itp) id zwraca pusty formularz 
 * 
 * @author nickname
 * @lans mega
 *
 **/
public class LekarzForm extends SimpleFormController {

	private final Log logger = LogFactory.getLog(getClass());	
	private BazaLekarzy bazalekarzy;
	private ResourceBundleMessageSource messagesource;
	
	@Override
	protected Object formBackingObject(HttpServletRequest request) throws Exception {
		
		String id = request.getParameter("id");
		
		if (!StringUtils.isBlank(id)){
			
			int iid = 0;
		
			try {
				iid = new Integer(id);
			} catch (Exception e) {
				
				logger.error("Exception przy konwersji ?id do int");
				return new Lekarz();
			}
			
			Lekarz l = bazalekarzy.getLekarzById(iid);
			
			return l!=null ? l : new Lekarz() ;
			
		}
		
		return new Lekarz();
	}
	
	
	@Override
	protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {

       SimpleDateFormat dateFormat = new SimpleDateFormat(messagesource.getMessage("data.format", null, null));
       dateFormat.setLenient(false);
       binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
       //StringTrimmerEditor bo w innym wypadku gdy pole w formularzu jest puste to odpowiadajace
       //mu pole w obiekcie ma wartosc null a nie jest pustym stringiem (pusty string zapisuje sie w bazie jako '"')
       binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
       //nie pamietam po co to   binder.registerCustomEditor(Integer.class,new CustomNumberEditor(Integer.class, false)); 
   // wszystkie pola z defaultu   binder.setAllowedFields(new String[] {"id", "imie", "nazwisko", "pesel", "dataurodzenia", "pwz","tel_kom"
    //		   ,"ulica","nrdomu","nrmieszkania","miejscowosc", "kodpocztowy"});
    
	}
	
	@Override
	public ModelAndView onSubmit(Object command) 
	  {
		
		logger.info("wywolano metode doSubmitAction");		
		
		Lekarz lekarz = (Lekarz) command;
		bazalekarzy.saveLekarz(lekarz);
		
		
		return new ModelAndView(getSuccessView()); 
		
	  }

	
	public BazaLekarzy getBazalekarzy() {
		return bazalekarzy;
	}
	public void setBazalekarzy(BazaLekarzy bazalekarzy) {
		this.bazalekarzy = bazalekarzy;
	}


	public ResourceBundleMessageSource getMessagesource() {
		return messagesource;
	}


	public void setMessagesource(ResourceBundleMessageSource messagesource) {
		this.messagesource = messagesource;
	}


}
